package com.baosight.risk.api.xtaa.code;

import com.baosight.risk.base.entity.MultipleUpdateStatus;
import com.baosight.risk.base.service.BaseService;
import com.baosight.risk.service.xtaa.code.entity.XtaaCode;

import java.util.List;
import java.util.Map;

/**
 * @author CuiShiHao
 * @description 字典数据管理
 * @date 2019/4/22
 */
public interface IXtaaCodeService extends BaseService<XtaaCode> {

    /**
     * 根据字典类型获取字典详细数据：仅启用数据
     *
     * @param ddTypeCode 字典类型
     * @return
     */
    List<XtaaCode> selectDataByDDTypeCode(String ddTypeCode);

    /**
     * 根据字典类型获取字典详细数据：全部数据
     *
     * @param ddTypeCode 字典类型
     * @return
     */
    List<XtaaCode> selectAllDataByDDTypeCode(String ddTypeCode);

    /**
     * 根据字典类型获取字典详细数据：全部数据
     *
     * @param ddTypeCode 字典类型
     * @param parentID   字典类型
     * @return
     */
    List<XtaaCode> selectLazyDataByCodeAndParent(String ddTypeCode, String parentID);

    List<XtaaCode> selectLazyRiskDataByCodeAndParent(String ddTypeCode, String parentID);

    /**
     * 过滤方法selectLazyDataByCodeAndParent返回的字典数据
     * @param codeList 字典数据
     * @return
     */
    List<XtaaCode> codeFilter(List<XtaaCode> codeList);

    /**
     * 根据字典类型获取字典详细数据,根据字典名称模糊查询
     *
     * @param ddTypeCode 字典类型
     * @param ddName     名称 模糊查询
     * @return
     */
    List<XtaaCode> selectDataByDDTypeCodeAndDDName(String ddTypeCode, String ddName);

    Integer insertCode(XtaaCode code);

    Integer updateCode(XtaaCode code);

    Integer deleteCode(String id);

    /**
     * 根据父节点id获取子集数据（仅包含子集）
     *
     * @param id 父节点id
     * @return
     */
    List<XtaaCode> selectSubsetByParentID(String id);

    /**
     * 根据父节点id获取全部子集数据（包含子集孙集）
     *
     * @param id 父节点id
     * @return
     */
    List<XtaaCode> selectAllSubsetByParentID(String id);

    /**
     * 根据编码名称获取下级数据（包含子集孙集）
     *
     * @param ddCode 编码名称
     * @return
     */
    List<XtaaCode> selectAllSubsetByDDCode(String ddCode);

    /**
     * 根据ID集合批量更新状态
     *
     * @param updateStatus
     * @return
     */
    Integer multipleUpdateStatus(MultipleUpdateStatus updateStatus);

    /**
     * 根据ID集合批量更新状态
     *
     * @param map
     * @return
     */
    Integer deleteByIds(Map<String, Object> map);

    /**
     * 根据字典名称和末级获取字典信息
     *
     * @param DDName 指标名称
     * @return
     */
    XtaaCode selectXtaaCodeByDDCodeAndEndLevel(String DDName);

    /**
     * 根据父节点ID获取字典信息
     *
     * @param ParentGuid 父节点ID
     * @return
     */
    XtaaCode selectXtaaCodeByParentGuid(String ParentGuid);

    /**
     * 根据字典信息获取父节点编码
     *
     * @param xtaaCode 字典信息
     * @return
     */
    String selectParentXtaaCodeNameByXtaaCode(XtaaCode xtaaCode);

    List<XtaaCode> listByParentCode(String ddType, String parentCode);
}
